home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / Add-ons / Resourceror ƒ / BTMP.c next >
Text File  |  1989-11-19  |  4KB  |  96 lines

  1. /* ========================================================================≠===========≠=============== *
  2.     file:    BTMP.c
  3.     version:    1.00.00
  4.     date:    11.20.89
  5.     history:    m_o 11.20.89
  6.  * ------------------------------------------------------------------------+-----------+--------------- *
  7.     Copyright © 1989, Michael Ogawa — All Rights Reserved.
  8.     May not be redistributed for commercial purposes.  May not be
  9.     redistributed if altered in any way, or without accompanying
  10.     documents.  May be freely distributed on electronic bulletin boards
  11.     provided no additional charges above the board’s standard connect
  12.     charges are imposed.  May be freely distributed by non-profit
  13.     organizations on disk provided that any charges for the distribution
  14.     disk does not exceed actual disk, labelling materials, reproduction,
  15.     and shipping charges incurred by the organization.
  16.     This software is provided “as is”, with no warranties, either express
  17.     or implied, being made regarding its fitness for any particular
  18.     purpose.
  19.  * ========================================================================≠===========≠=============== */
  20.  
  21. #include "BTMP.h"
  22.  
  23.  
  24. /* constants ==============================================================≠===========≠=============== */
  25.  
  26. #ifndef NULL
  27. #define NULL    0L
  28. #endif NULL
  29.  
  30. #ifndef kLockStateFlag
  31. #define kLockStateFlag        0x80
  32. /*    The constants kResourcStateFlag, kPurgeStateFlag, and kLockStateFlag
  33. are bit flags for the master pointer flags of a handle.  They are used to
  34. set or determine whether a relocatable block is to a resource, is
  35. purgeable, or is locked. */
  36. /*    m_o 07.17.89 */
  37. #endif kLockStateFlag
  38.  
  39.  
  40. /* entry points ===========================================================≠===========≠=============== */
  41.  
  42. void PlotPBitMap(const Rect *r, TBTMPPtr pTheBitMap, short mode)
  43. /*    Analagous to PlotIcon except that you pass a pointer to a BTMP instead
  44. of a handle to an ICON.  Mode specifies the transfer mode to use which can
  45. be any of the source transfer modes. This routine assumes that the handle
  46. to the BTMP is locked. */
  47. /*    mps 06.22.89/m_o 11.20.89 */
  48. {
  49.     GrafPtr gptr;
  50.  
  51.     GetPort(&gptr);
  52.     CopyBits(pTheBitMap, &gptr->portBits, 
  53.         &pTheBitMap->bounds, r, mode, NULL);
  54. }
  55.  
  56. /* ------------------------------------------------------------------------+-----------+--------------- */
  57.  
  58. char LockBitMap(TBTMPHndl hTheBitMap)
  59. /*    LockBitMap() locks the BTMP specified by hTheBitMap and sets the
  60. map.baseAddr field to point to the map.bitImage field of the BTMP.  The
  61. function's return value is the original value of the byte that contains
  62. the flags of the master pointer for the given handle (as returned by
  63. HGetState()).
  64.     Warning: If the handle is not locked on entry then the OS routine
  65. MoveHHi() is called before locking the handle. Therefore, this routine may
  66. move or purge blocks in the heap. */
  67. /*    m_o 11.20.89 */
  68. {
  69.     char origState;
  70.     TBTMPPeek pkMyBitMap;
  71.  
  72.     if (!((origState = HGetState((Handle)hTheBitMap)) & kLockStateFlag)) {
  73.         MoveHHi((Handle)hTheBitMap);
  74.         HLock((Handle)hTheBitMap);
  75.     }
  76.     pkMyBitMap = (TBTMPPeek)*hTheBitMap;
  77.     pkMyBitMap->map.baseAddr = (Ptr)pkMyBitMap->image;
  78.     return(origState);
  79. }
  80.  
  81. /* ------------------------------------------------------------------------+-----------+--------------- */
  82.  
  83. void PlotBitMap(const Rect *r, TBTMPHndl hTheBitMap, short mode)
  84. /*    Analagous to PlotIcon but it works with BTMPs, not ICONs. Mode
  85. specifies the transfer mode to use which can be any of the source transfer
  86. modes. */
  87. /*    mps 06.22.89/m_o 11.20.89 */
  88. {
  89.     char origState;
  90.  
  91.     origState = LockBitMap(hTheBitMap);    
  92.     PlotPBitMap(r, *hTheBitMap, mode);
  93.     (*hTheBitMap)->baseAddr = NULL;
  94.     HSetState((Handle)hTheBitMap, origState);
  95. }
  96.